// import axios from 'axios'

// axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'

// // create an axios instance
// const service = axios.create({
//     baseURL: "http://localhost:9999", // 本地开发环境地址
//     withCredentials: true, // send cookies when cross-domain requests
//     timeout: 10000 // request timeout
// })

// // request interceptor
// service.interceptors.request.use(
//     config => {
//         // do something before request is sent
//         if (config.headers.auth === true) { // 判断请求是否需要认证
//             const token = uni.getStorageSync('token')
//             if (token) {
//                 config.headers['Authorization'] = token;
//             }
//         }
//         return config
//     },
//     error => {
//         // do something with request error
//         console.log(error) // for debug
//         return Promise.reject(error)
//     }
// )

// service.defaults.adapter = function(config) {
//     return new Promise((resolve, reject) => {
//         uni.request({
//             method: config.method.toUpperCase(),
//             url: config.baseURL + (config.url || ''),
//             header: config.headers,
//             data: config.data,
//             dataType: config.dataType,
//             responseType: config.responseType,
//             sslVerify: config.sslVerify,
//             success: (res) => {
//                 const response = {
//                     data: res.data,
//                     status: res.statusCode,
//                     headers: res.header,
//                     config: config
//                 };
//                 resolve(response);
//             },
//             fail: (err) => {
//                 reject(err);
//             }
//         })
//     })
// }

// // response interceptor
// service.interceptors.response.use((response) => {
//         return response.data
//     },
//     error => {
//         if (error.response) {
//             const { code, msg } = error.response.data || {};
//             if (code === 'A0230') { // token过期
//                 uni.showToast({
//                     title: '会话已过期，请重新登录',
//                     success() {
//                         uni.navigateTo({
//                             url: `/pages/login/login`,
//                         });
//                     }
//                 })
//             } else {
//                 uni.showToast({
//                     title: msg || '请求出错',
//                     icon: 'none'
//                 });
//             }
//         } else {
//             uni.showToast({
//                 title: '网络请求失败',
//                 icon: 'none'
//             });
//         }
//         return Promise.reject(error);
//     }
// )

// export default service

import axios from 'axios';

// 设置默认请求头
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';

// 创建一个 axios 实例
const service = axios.create({
    baseURL: "http://localhost:9999", // 本地开发环境地址
    withCredentials: true, // 跨域请求时发送 cookies
    timeout: 10000 // 请求超时时间（毫秒）
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 在发送请求之前做一些处理
        if (config.headers.auth === true) { // 判断请求是否需要认证
            const token = uni.getStorageSync('token');
            if (token) {
                config.headers['Authorization'] = `Bearer ${token}`; // 推荐使用 Bearer 前缀
            } else {
                // 如果没有 token，可以选择移除 Authorization 头或采取其他措施
                delete config.headers['Authorization'];
            }
        }
        return config;
    },
    error => {
        // 处理请求错误
        console.error('请求错误:', error); // 更详细的错误日志
        return Promise.reject(error);
    }
);

// 使用适配器处理 uni.request
service.defaults.adapter = function(config) {
    return new Promise((resolve, reject) => {
        uni.request({
            method: config.method.toUpperCase(),
            url: config.baseURL + (config.url || ''),
            header: {
                ...config.headers,
                'Content-Type': 'application/json' // 确保 Content-Type 正确
            },
            data: config.data,
            dataType: 'json', // 微信小程序一般使用 json
            success: (res) => {
                // 微信小程序的 res.data 已经是 JSON 格式
                const response = {
                    data: res.data,
                    status: res.statusCode,
                    headers: res.header,
                    config: config
                };
                resolve(response);
            },
            fail: (err) => {
                reject(err);
            }
        });
    });
}

// 响应拦截器
service.interceptors.response.use(
    response => {
        // 直接返回响应数据
        return response.data;
    },
    error => {
        if (error.response) {
            const { code, msg } = error.response.data || {};
            if (code === 'A0230') { // token过期
                uni.showToast({
                    title: '会话已过期，请重新登录',
                    icon: 'none',
                    duration: 2000,
                    success() {
                        uni.navigateTo({
                            url: `/pages/login/login`,
                        });
                    }
                });
            } else {
                uni.showToast({
                    title: msg || '请求出错',
                    icon: 'none'
                });
            }
        } else if (error.request) {
            // 请求已发送但没有收到响应
            uni.showToast({
                title: '网络请求失败，请检查网络连接',
                icon: 'none'
            });
        } else {
            // 其他错误
            uni.showToast({
                title: '请求出错',
                icon: 'none'
            });
        }
        return Promise.reject(error);
    }
);

export default service;